package 类加载器.类的初始化阶段;

import org.junit.Test;

import java.io.*;
import java.util.Random;

/**
 * <P> @Author: ideaAdmin
 * <P> TODO: Class
 * <P> TODO:
 * TODO 3．当使用类、接口的静态字段时(final修饰特殊考虑），比如，使用getstatic或者putstatic指令。（对应访问变量、赋值变量操作）
 *
 * <P> Description:
 */

public class ActiveUse2 {
    public static void main(String[] args)  {
        //System.out.println(User.num1);
        //System.out.println(User.num2);
        System.out.println(User.num3);
    }

    @Test
    public void test1(){
        //System.out.println(CompareA.num1);
        System.out.println(CompareA.num3);
    }

}

class User{
    static {
        System.out.println("User.static initializer");
    }
    public static int num1 = 1;
    //不会触发 因为在准备阶段就直接赋值成功
    public static final int num2 = 1;
    public static final int num3 = new Random().nextInt(10);
}

interface CompareA{
    public static final Thread t = new Thread(){
       {
          System.out.println("CompareA initializer");
      }
    };

    //不会触发 因为在准备阶段就直接赋值成功
    //接口中的所有属性都是静态和final的
    public static final int num2 = 1;
    public static final int num3 = new Random().nextInt(10);
}
